package com.changpei.search.service;

import com.alibaba.fastjson.JSONObject;
import com.changpei.core.pojo.User;
import com.changpei.search.pojo.ContentIndex;

import com.changpei.common.result.Result;
import com.changpei.search.vo.ContentIndexVO;
import org.springframework.data.domain.Page;

import java.util.List;
import java.util.Map;
import java.util.Set;


/**
 *
 * <p>Title : Content</p>
 * <p>Description : Content业务层接口</p>
 * @author weibiao
 * @date 2020年3月7日
 */
public interface ContentIndexService {

    /**
     * 导入全部数据到ES
     *
     * @return
     */
    void importData();

    /**
     * 新增ContentIndex至es库
     * @param contentIndex
     * @return
     */
    Result<String> save(ContentIndex contentIndex);

    /**
     * 修改
     * @param contentIndex
     * @return
     */
    Result<String> update(ContentIndex contentIndex);

    /**
     * 根据用户删除
     *
     * @param id
     * @return
     */
    Result<String> deleteById(Long id);

    /**
     * 根据ID查询
     *
     * @param id
     * @return
     */
    ContentIndex findById(Long id);

    /**
     * 查询全部
     *
     * @return
     */
    List<ContentIndex> findAll();

    /**
     * 查询我的浏览记录
     * @param map
     * @return
     */
    Map<String, Object> history(Map<String, Object> map);

    /**
     * 查询我的收藏
     * @param map
     * @return
     */
    Map<String, Object> collect(Map<String, Object> map);

    /**
     * 缓存热门数据
     */
    void hot();

    /**
     * 搜索页面
     * @param content
     * @param pageNum
     * @param pageSize
     * @return
     */
    Page<ContentIndexVO> search(String content, int pageNum, int pageSize);

    /**
     * 获取内容文件
     * @param contentId
     * @return
     */
    List<JSONObject> getContentFiles(Long contentId);

    /**
     * 获取内容标签
     * @param contentId
     * @return
     */
    List<String> getContentTags(Long contentId);

    /**
     * 获取用户信息
     * @param contentId
     * @return
     */
    User getUserInfo(Long contentId);

    /**
     * 我的锁定数据
     * @param userId
     * @return
     */
    Set<Long> myLockData(Long userId);

    /**
     * 内容详情推荐
     * @param map
     * @return
     */
    Set<ContentIndexVO> detailRecommend(Map<String, Object> map);

    /**
     * 查询用户下内容
     * @param userId
     * @param pageNum
     * @param pageSize
     * @return
     */
    Page<ContentIndexVO> getUserContents(Long userId, Integer pageNum, Integer pageSize);

    /**
     * 清理锁定数据
     */
    void clearTmpLockData();
}
